package control.informes;

import java.util.Date;
import java.util.Iterator;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Table;

import control.FabricaFechas;
import datos.ControlHoras;
import datos.Horas;
import datos.Tarea;

public class InformePorSemana extends Informe{

	public InformePorSemana(ModeloInformeSemanal modelo) {
		super(modelo);
	}

	@Override
	protected void insertarContenido(Document report, ModeloInforme modelo) throws DocumentException {
		// Titulo
		Paragraph title = new Paragraph("Informe de horas", TITULOPRINCIPAL);
		title.setAlignment(Paragraph.ALIGN_CENTER);
		title.setSpacingAfter(20);
		report.add(title);

		// Fecha de generacion
		Paragraph date = new Paragraph(FabricaFechas.obtenerFechaInforme(), NEGRITA);
		date.setAlignment(Paragraph.ALIGN_RIGHT);
		date.setSpacingAfter(10);
		report.add(date);

		// Reporte de horas
		String d = ControlHoras.df.format((Date)modelo.getData("Desde"));
		String h = ControlHoras.df.format((Date)modelo.getData("Hasta"));
		boolean sinHoras = true;
		Iterator<Tarea> i = modelo.getTareas().iterator();
		while (i.hasNext()) {
			Tarea tarea = i.next();
			Paragraph p = new Paragraph(tarea.toString(), NEGRITA);
			p.setSpacingBefore(10);
			Table tablaDeHoras = reporteHoras(tarea.getControlHoras(), d, h);
			if (tablaDeHoras != null) {
				report.add(p);
				insertaBloque(report, "Reporte de horas", tablaDeHoras);
				sinHoras = false;
			}
		}
		if(sinHoras){
			report.add(new Paragraph("No se han encontrado horas para generar el informe."));
		}
		
	}

	private Table reporteHoras(ControlHoras ch, String desde, String hasta) throws DocumentException {
		Table table = new Table(4);
		table.setPadding(3);
		table.addCell(cabecera("Fecha", 1, 2));
		table.addCell(cabecera("Horas", 3, 1));
		table.addCell(cabecera("Analisis", 1, 1));
		table.addCell(cabecera("Pruebas", 1, 1));
		table.addCell(cabecera("Total", 1, 1));
		table.endHeaders();

		int totalAnalisis = 0;
		int totalPruebas = 0;

		Iterator<String> i = ch.iterator();
		while (i.hasNext()) {
			String fecha = i.next();
			if ((darLaVuelta(desde).compareTo(darLaVuelta(fecha)) <= 0) && (darLaVuelta(hasta).compareTo(darLaVuelta(fecha)) >= 0)) {
				Horas h = ch.obtenerHoras(fecha);
				table.addCell(celda(fecha));
				table.addCell(celda(Integer.toString(h.analisis())));
				table.addCell(celda(Integer.toString(h.pruebas())));
				table.addCell(celda(Integer.toString(h.analisis() + h.pruebas())));
				totalAnalisis += h.analisis();
				totalPruebas += h.pruebas();
			}
		}

		table.addCell(celda("Total"));
		table.addCell(celda(Integer.toString(totalAnalisis)));
		table.addCell(celda(Integer.toString(totalPruebas)));
		table.addCell(celda(Integer.toString(totalAnalisis + totalPruebas)));

		if (totalAnalisis + totalPruebas == 0)
			return null;

		return table;
	}


	private String darLaVuelta(String fecha) {
		String[] partes = fecha.split("/");
		return partes[2] + partes[1] + partes[0];
	}

}
